package cn.cj.erp.bo.system;

import cn.cj.erp.common.SearchParam;
import cn.cj.erp.common.annotation.Search;
import cn.cj.erp.common.enums.SearchType;
import cn.cj.erp.common.enums.NoticeTypeEnum;
import cn.cj.erp.common.enums.StatusEnum;
import cn.cj.erp.common.enums.YesNoEnum;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;

/**
 * 通知公告表
 * 
 * @author chenjian
 */
@Data
@EqualsAndHashCode(callSuper = true)
public class SysNoticeBo extends SearchParam {

    /** 通知公告表id */
    @JsonSerialize(using = ToStringSerializer.class)
    private Long id;

    /** 通知公告标题 */
    @Search(type = SearchType.LIKE)
    private String noticeTitle;

    /** 类型（1通知,2公告） */
    @Search(type = SearchType.EQ)
    private NoticeTypeEnum noticeType;

    /** 公告内容 */
    private String noticeContent;

    /** 公告内容HTML */
    private String noticeContentHtml;

    /** 公告状态 */
    @Search(type = SearchType.EQ)
    private StatusEnum status;

    /** 备注 */
    private String remark;

    /** 创建时间（默认倒序排序） */
    @Search(defaultSortField = true)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date createTime;

    /** 更新时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date modifyTime;

    /** 是否已读{@link YesNoEnum}，仅在指定通知接收人时使用 */
    @Search(type = SearchType.EQ)
    private YesNoEnum readStatus;

    /** 用户id（仅搜索用） */
    private Long userId;

    /** 用户阅读记录(仅用于返回给前端展示) */
    private SysNoticeUserReadBo sysNoticeUserRead;
}
